.TITLE CODRV .IDENT /03.00/ ; ; Copyright (c) 1995-1999 by Mentec, Inc., U.S.A. ; All rights reserved ; ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ; BE USED AND COPIED ONLY IN ACCORDANCE WITH THE ; TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE ; ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE ; MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO ; AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO ; CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED ; AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ; ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR ; RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS ; NOT SUPPLIED BY DIGITAL. ; ; ; STEVE RUZICH 03-SEP-80 ; ; CONSOLE DRIVER ; ; ; MODIFIED FOR RSX-11M-PLUS V4.1 BY: ; ; ; L. KOGAN 20JAN-88 03.00 ; ; LK732 -- SAVE R1,R2 BEFORE CALLING $IOFIN ; ; MACRO CALLS ; .MCALL ABODF$,HWDDF$,PKTDF$,TCBDF$,UCBDF$ ABODF$ ; DEFINE TASK ABORT CODES HWDDF$ ; DEFINE HARDWARE REGISTERS PKTDF$ ; DEFINE I/O PACKET OFFSETS TCBDF$ ; DEFINE TASK CONTROL BLOCK OFFSETS UCBDF$ ; DEFINE UCB OFFSETS ; ; DRIVER DISPATCH TABLE ; DDT$ CO,1,NONE ;+ ; **-COINI-CONSOLE DRIVER INITIATOR ; ; EXAMINE FUNCTION CODE. IO.WLB PACKETS ARE QUEUED TO COT'S PACKET ; QUEUE. THE TERMINAL DRIVER IS REQUESTED TO PROCESS ALL ELSE. ; ; INPUTS: R5 = UCB ADDRESS ; R4 = SCB ADDRESS ; R1 = I/O PACKET ADDRESS ; ;- COINI: CMPB I.FCN+1(R1),#IO.WLB/400 ; WRITE LOGICAL BLOCK FUNCTION? BNE 10$ ; NO - QUEUE TO TTDRV TST U.CTCB(R5) ; YES- COT WILL PUT ITS TCB ADDR HERE ; IF IT IS ACTIVE, ZERO ON EXIT. BEQ 10$ ; ZERO? - SOMEONE MUST HAVE REDIRECTED ; CO: TO ITSELF - QUEUE PACKET TO TTDRV MOV R5,R0 ; NON-ZERO - CONTINUE ADD #U.COTQ,R0 ; ADDRESS OF COT'S I/O PACKET QUEUE CALL $QINSP ; INSERT IN QUEUE BY PRIORITY MOV U.CTCB(R5),R0 ; COT'S TCB ADDRESS FOR REQUEST CALLR $EXRQN ; START COT 10$: MOV #IE.OFL&377,R0 ; IF ERROR, RETURN DEVICE OFFLINE CODE MOV U.RED2(R5),R2 ; IS THERE A DEFAULT CONSOLE TERMINAL? BEQ 20$ ; NO - FINISH I/O, RETURNING ERROR CODE MOV R2,R5 ; YES- SET UP TERMINAL UCB MOV R2,I.UCB(R1) ; I/O PACKET NEEDS THE RIGHT UCB, TOO. CALLR $DRQRQ ; QUEUE REQUEST TO THIS TERMINAL 20$: MOV R1,R3 ; PACKET ADDRESS FOR $IOFIN CLR R1 ; NO BYTES TRANSFERED. CALLR $IOFIN ; FINISH I/O ;+ ; **-COCAN-CANCEL I/O ENTRY POINT ; ; OUTSTANDING I/O PACKETS MAY BE SEVERAL PLACES: ; 1) IN COT'S UCB I/O PACKET QUEUE: DEQUEUE AND FINISH THESE PACKETS. ; 2) CURRENTLY BEING PROCESSED BY COT: ASSUME A QUICK FINISH AND IGNORE. ; 3) BEING PROCESSED BY TTDRV: CALL $IOKIL FOR TTDRV. ; ; THE LAST STEP HAS THE SIDE EFFECT OF KILLING ALL TERMINAL I/O FROM THE ; TASK, NOT JUST I/O WHICH CODRV FIELDED TO TTDRV. ; ; INPUTS: R5 = UCB ADDRESS ; R4 = SCB ADDRESS ; R1 = TCB ADDRESS ; ;- COCAN: MOV #IE.ABO&377,R0 ; SET FINAL STATUS TO ABORT MOV R5,R2 ; GET ADDRESS OF PACKET QUEUE LISTHEAD ADD #U.COTQ,R2 ; ; ; THE FOLLOWING CODE WAS MODIFIED FROM $IOKIL PROCESSING IN IOSUB. ; IT APPEARS THAT THE TCB ADDRESS WILL BE RETURNED AS WORD 2 OF IOSTAT. ; 10$: MOV R2,R3 ; COPY IT 20$: MOV R3,R4 ; SAVE ADDRESS OF CURRENT ENTRY MOV (R4),R3 ; GET ADDRESS OF NEXT ENTRY BEQ 40$ ; IF EQ END OF LIST CMP R1,I.TCB(R3) ; REQUEST FOR CURRENT TASK? BNE 20$ ; IF NE NO MOV (R3),(R4) ; CLOSE UP LIST BNE 30$ ; IF NE NO NEW LAST MOV R4,2(R2) ; SET ADDRESS OF NEW LAST 30$: MOV R1,-(SP) ; SAVE R1 MOV R2,-(SP) ; SAVE R2 CALL $IOFIN ; FINISH I/O REQUEST MOV (SP)+,R2 ; RESTORE R2 MOV (SP)+,R1 ; RESTORE R1 BR 10$ ; GO AGAIN 40$: MOV U.RED2(R5),R5 ; IS THERE A DEFAULT CONSOLE TERMINAL? BEQ EXIT ; NO - CONTINUE JMP $IOKIL ; YES- KILL ANY I/O WHICH CODRV MIGHT ; HAVE GIVEN TO TTDRV. ;+ ; **-COOUT - TIMEOUT ENTRY POINT ; ; COT SETS S.CTM, THE CURRENT TIMEOUT COUNT, WHEN IT CONTAINS A ; PARTIALLY FILLED LOGFILE BUFFER. WHEN THE COUNT EXPIRES, CODRV ; INFORMS COT THAT IT IS TIME TO FLUSH THIS BUFFER TO THE LOGFILE. ; ; INPUTS: R5 = UCB ADDRESS ; R4 = SCB ADDRESS ; ;- COOUT: MOV U.CTCB(R5),R0 ; COT TCB, IF ACTIVE BEQ EXIT ; EQ = INACTIVE - DO NOTHING CALLR $EXRQN ; REQUEST COT WITH NO QUE ENTRY - ; THIS IS A CUE TO FLUSH THE BUFFER. EXIT: ; COMMON EXIT COPWF: RETURN ; ENTRY POINT FOR POWERFAIL .END